/*
 * varios.c
 *
 *  Created on: 21/11/2011
 *      Author: utn_so
 */


#include "../../headers/GlobalHeader.h"

extern struct_config configuracion;
extern int32_t filesize;
extern int32_t algoritmoUtilizado, modoInicio;
extern PPD_CHS posicionActualCabezal;
t_log *logger;

//PROTOTIPO DE LA FUNCION
t_log *crearLog();

//FUNCIONES

void inicializarEstructuras()
{
	//CARGO EN EL STRUCT DEL CONFIG LA INFORMACION DEL ARCHIVO DE CONFIGURACION
	//configuracion = cargaConfiguracionInicial();

	//HAGO APUNTAR EL CABEZAL A LA POSICION (0,0,1)
	cargoPosicionInicialDisco();

	//CALCULO EL TAMAÑO DEL DISCO
	filesize = tamanioDisco();

	//MAPEO DISCO A MEMORIA
	handlerArchivoMapeado=ppd_abrirArchivo();

	//CREO EL ARCHIVO DE LOG
	logger = crearLog();

	//CARGO LAS VARIABLES MODO INICIO, PARA LOS SWITCH DE LISTEN O CONNECT Y SWITCH DE ALGORITMO CON INANICION Y SIN INANICION
	cargoModosInicio();

}

t_log *crearLog(){

	if(configuracion.LogActivado==1){
		logger = log_create("Runner", "ppd.log", DEBUG | INFO | WARNING, M_CONSOLE_DISABLE);
	}

	return logger;
}

void sigchld_handler (int signal)
{
	while ( waitpid(-1, 0, WNOHANG) );
}

void cargoPosicionInicialDisco()
{
	PPD_CHS sectorCargo;
	sectorCargo.cylinder = 0;
	sectorCargo.head = 0;
	sectorCargo.sector = 1;

	posicionActualCabezal = sectorCargo;
}

void cargoModosInicio(){

	if(!(strcmp(configuracion.ModoInicio,"connect"))){
		modoInicio = CONNECT;
	}
	else{
		modoInicio = LISTEN;
	}

	if(!(strcmp(configuracion.AlgoritmoPlanificacion, "sstf"))){
		algoritmoUtilizado = CON_INANICION;
	}
	else{
		algoritmoUtilizado = SIN_INANICION;
	}
}
